/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package biblioteca;

/**
 *
 * @author haperlin
 */
public class Biblioteca {
    private Aluno vetAluno[] = new Aluno[10]; //vetor para armazenar alunos
    private int contAluno=0; //contador para controlar o numero de alunos cadastrados
    private Professor vetProfessor[] = new Professor[10]; //vetor para armazenar professores

    private Livro vetLivro[] = new Livro[20]; //vetor para armazenar livros
    private int contLivro = 0; //contador para controlar o numero de livros cadastrados
    private Revista vetRevista[] = new Revista[20]; //vetor para armazenar revistas
    private int contRevista=0; //contador para controlar o numero de revistas cadastradas
    private Jornal vetJornal[] = new Jornal[20]; //vetor para armazenar jornais
    private int contJornal =0; //contador para controlar o numero de jornais cadastrados
    private CD vetCD[] = new CD[20]; //vetor para armazenar cds
    private int contCD=0; //contador para controlar o numero de cds cadastrados



    //Armazena um objeto professor passado por parâmetro.
    //O objeto é colocado na próxima posição livre do vetor, encontrada
    //através do for.
    //Retorna true se conseguiu armazenar, false caso contrário
    public boolean cadastraProfessor(Professor p){
        for(int i=0;i<vetProfessor.length;i++){
            if(vetProfessor[i] == null){
                vetProfessor[i] = p;
                return true;
            }
        }
        return false;
    }

    //Percore o vetor de professor buscando um objeto com o mesmo código
    // se não encontrar retorna null
    public Professor buscaProfessor(int cod){
        for(int i=0;i<vetProfessor.length;i++){
            if(vetProfessor[i]!= null){
                if(vetProfessor[i].getCod() == cod)
                    return vetProfessor[i];
            }
        }

        return null;
    }


    //cadastra um aluno passado por parâmetro.
    //Utiliza o contador para determinar a posição para colocar o objeto
    //Se não houver espaço no vetor retorna false, caso contrário retorna true.
    public boolean cadastraAluno(Aluno a){
        if(contAluno+1 < vetAluno.length){
            vetAluno[contAluno] = a;
            contAluno++;
            return true;
        }
        return false;
    }

    public Aluno buscaAluno(int cod){
        for(int i=0;i<contAluno;i++){
            if(vetAluno[i].getCod() == cod)
                return vetAluno[i];
        }
        return null;
    }

    //Funcionamento semelhante ao cadastra Aluno.
    public boolean cadastraLivro(Livro l){
        if(contLivro+1 < vetLivro.length){
            vetLivro[contLivro] = l;
            contLivro++;
            return true;
        }
        return false;
    }

    public Livro buscaLivro(int cod){
        for(int i=0;i<contLivro;i++){
            if(vetLivro[i].getCod() == cod)
                return vetLivro[i];
        }
        return null;
    }

    public boolean cadastraRevista(Revista r){
        if(contRevista+1 < vetRevista.length){
            vetRevista[contRevista] = r;
            contRevista++;
            return true;
        }
        return false;
    }

    public Revista buscaRevista(int cod){
        for(int i=0;i<contRevista;i++){
            if(vetRevista[i].getCod() == cod)
                return vetRevista[i];
        }
        return null;
    }

    public boolean cadastraJornal(Jornal j){
        if(contJornal+1 < vetJornal.length){
            vetJornal[contJornal] = j;
            contJornal++;
            return true;
        }
        return false;
    }

     public Jornal buscaJornal(int cod){
        for(int i=0;i<contJornal;i++){
            if(vetJornal[i].getCod() == cod)
                return vetJornal[i];
        }
        return null;
    }

    public boolean cadastraCD(CD c){
        if(contCD+1 < vetCD.length){
            vetCD[contCD] = c;
            contCD++;
            return true;
        }
        return false;
    }

    public CD buscaCD(int cod){
        for(int i=0;i<contCD;i++){
            if(vetCD[i].getCod() == cod)
                return vetCD[i];
        }
        return null;
    }

    //Empresta um livro a um aluno
    //Verifica se o livro já não está emprestado
    //Tenta emprestar o livro  ao aluno
    //Retorna true se tudo ocorrer bem
    //False caso contrário
    public boolean emprestaMaterial(Aluno a, Material m){
        if(!m.isEmprestado()){
            if(a.emprestaMaterial(m)){
                m.setEmprestado(true);
                return true;
            }
        }
        return false;
    }

    public boolean devolveMaterial(Aluno a, Material m){
        if(m.isEmprestado()){
            if(a.devolveMaterial(m)){
                m.setEmprestado(false);
                return true;
            }
        }
        return false;
    }
    

    //Empresta um livro a um professor
    //Verifica se o livro já não está emprestado
    //Tenta emprestar o livro  ao aluno
    //Retorna true se tudo ocorrer bem
    //False caso contrário
    public boolean emprestaLivro(Professor p, Livro l){
        if(!l.isEmprestado()){
            if(p.emprestaLivro(l)){
                l.setEmprestado(true);
                return true;
            }
        }
        return false;
    }

     public boolean emprestaRevista(Professor p, Revista r){
        if(!r.isEmprestado()){
            if(p.emprestaRevista(r)){
                r.setEmprestado(true);
                return true;
            }
        }
        return false;
    }

    public boolean emprestaJornal(Professor p, Jornal j){
        if(!j.isEmprestado()){
            if(p.emprestaJornal(j)){
                j.setEmprestado(true);
                return true;
            }
        }
        return false;
    }

     public boolean emprestaCD(Professor p, CD c){
        if(!c.isEmprestado()){
            if(p.emprestaCD(c)){
                c.setEmprestado(true);
                return true;
            }
        }
        return false;
    }

         //Devolve um livro emprestado por um aluno
     //Verifica se o livro realmente está emprestado
     //Tenta devolver o livro
     //Retorna true se conseguiu
     //False caso contrário
    public boolean devolveLivro(Professor p, Livro l){
        if(l.isEmprestado()){
            if(p.devolveLivro(l)){
                l.setEmprestado(false);
                return true;
            }
        }
        return false;
    }

    public boolean devolveRevista(Professor p, Revista r){
        if(r.isEmprestado()){
            if(p.devolveRevista(r)){
                r.setEmprestado(false);
                return true;
            }
        }
        return false;
    }

    public boolean devolveJornal(Professor p, Jornal j){
        if(j.isEmprestado()){
            if(p.devolveJornal(j)){
                j.setEmprestado(false);
                return true;
            }
        }
        return false;
    }

    public boolean devolveCD(Professor p, CD c){
        if(c.isEmprestado()){
            if(p.devolveCD(c)){
                c.setEmprestado(false);
                return true;
            }
        }
        return false;
    }

    public String listaLivros(){
        String str="*****Lista de Livros******\n";

        for(int i=0;i<contLivro;i++){
            str = str + "Cod: "+vetLivro[i].getCod() +" Nome: " +vetLivro[i].getNome()+"\n";
        }
        str = str + "*************************\n";

        return str;
    }

    public String listaRevistas(){
        String str="*****Lista de Revistas******\n";

        for(int i=0;i<contRevista;i++){
            str = str + "Cod: "+vetRevista[i].getCod() +" Nome: " +vetRevista[i].getNome()+"\n";
        }
        str = str + "*************************\n";

        return str;
    }

    public String listaJornais(){
        String str="*****Lista de Jornais******\n";

        for(int i=0;i<contJornal;i++){
            str = str + "Cod: "+vetJornal[i].getCod() +" Nome: " +vetJornal[i].getNome()+"\n";
        }
        str = str + "*************************\n";

        return str;
    }

    public String listaCDs(){
        String str="*****Lista de CDs******\n";

        for(int i=0;i<contCD;i++){
            str = str + "Cod: "+vetCD[i].getCod() +" Nome: " +vetCD[i].getNome()+"\n";
        }
        str = str + "*************************\n";

        return str;
    }

    public String listaAlunos(){
        String str="*****Lista de Alunos******\n";

        for(int i=0;i<contAluno;i++){
            str = str + "Cod: "+vetAluno[i].getCod() +" Nome: " +vetAluno[i].getNome()+"\n";
        }
        str = str + "*************************\n";

        return str;
    }

    public String listaProfessores(){
        String str="*****Lista de Professores******\n";

        for(int i=0;(i<vetProfessor.length && vetProfessor[i]!= null);i++){
            str = str + "Cod: "+vetProfessor[i].getCod() +" Nome: " +vetProfessor[i].getNome()+"\n";
        }
        str = str + "*************************\n";

        return str;
    }

    public String relatorioEmprestimo(){
        String str="*****Emprestimo de Professores******\n";

        for(int i=0;(i<vetProfessor.length && vetProfessor[i]!= null);i++){
            str = str + vetProfessor[i].imprime()+"\n";
        }

        str = str+"****** Emprestimo de Alunos ******\n";
        for(int i=0;i<contAluno;i++){
            str = str + vetAluno[i].imprime()+"\n";
        }
        str = str + "*************************";

        return str;


    }


}
